package com.edu.d9_reflect;


import java.io.FileOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;

/**
 * 定义个反射框架，用于保存任意的对象到文件中
 */
public class ObjectFrame {
    public static void saveObject(Object obj) throws Exception {

        PrintStream printStream = new PrintStream(new FileOutputStream("D:\\IdeaProjects\\Javase_hello\\day12-net-app\\src\\com\\data.txt",true));
        //obj是任意对象，到底有多少字段要保存
        Class c = obj.getClass();
        String simpleName = c.getSimpleName();
        printStream.println("------------------"+simpleName+"-----------------");
        //2、从这个类中提取全部的成员变量
        Field[] fields = c.getDeclaredFields();
        for (Field field : fields) {
            //遍历拿到每个成员的，成员变量名
            String name = field.getName();
            //拿到这个成员变量对象的数据
            /**
             * 禁止访问检查，用于破坏封装性，进行暴力反射，强取private修饰的属性、方法等
             */
            field.setAccessible(true);
            String value = field.get(obj)+"";
            printStream.println(name+"="+value);
        }

        printStream.close();
    }
}
